home *** CD-ROM | disk | FTP | other *** search
- package netscape.softupdate;
-
- import java.util.Enumeration;
- import java.util.Vector;
- import netscape.javascript.JSObject;
- import netscape.security.AppletSecurity;
- import netscape.security.AppletSecurityException;
- import netscape.security.Principal;
- import netscape.security.PrivilegeManager;
- import netscape.security.Target;
- import netscape.security.UserDialogHelper;
- import netscape.security.UserTarget;
-
- public final class SoftwareUpdate {
- static final int nTargets = 3;
- static String[] targetNames = new String[]{"LimitedInstall", "FullInstall", "SilentInstall"};
- public static final int LIMITED_INSTALL = 0;
- public static final int FULL_INSTALL = 1;
- public static final int SILENT_INSTALL = 2;
- protected static final String IMPERSONATOR = "Impersonator";
- static final int BAD_PACKAGE_NAME = -200;
- static final int UNEXPECTED_ERROR = -201;
- static final int ACCESS_DENIED = -202;
- static final int TOO_MANY_CERTIFICATES = -203;
- static final int NO_INSTALLER_CERTIFICATE = -204;
- static final int NO_CERTIFICATE = -205;
- static final int NO_MATCHING_CERTIFICATE = -206;
- static final int UNKNOWN_JAR_FILE = -207;
- static final int INVALID_ARGUMENTS = -208;
- static final int ILLEGAL_RELATIVE_PATH = -209;
- static final int USER_CANCELLED = -210;
- static final int INSTALL_NOT_STARTED = -211;
- static final int SILENT_MODE_DENIED = -212;
- static final int REBOOT_NEEDED = 999;
- protected String packageName;
- protected Vector installedFiles;
- protected VersionInfo versionInfo;
- protected String userPackageName;
- private ProgressMediator progress;
- private int userChoice;
- private boolean silent;
- private String installerJarName;
- private String jarName;
- private int zigPtr;
- private Principal installPrincipal;
-
- public SoftwareUpdate(JSObject var1, String var2) {
- this.userPackageName = var2;
- this.installPrincipal = null;
- this.packageName = null;
- this.progress = null;
- this.zigPtr = 0;
- this.userChoice = -1;
- this.VerifyJSObject(var1);
- this.jarName = (String)var1.getMember("src");
- this.silent = false;
-
- try {
- var1.getMember("silent");
- this.silent = (Boolean)var1.getMember("silent");
- } catch (Throwable var3) {
- System.out.println("Unexpected throw on silent");
- this.silent = false;
- }
- }
-
- protected void finalize() throws Throwable {
- super.finalize();
- this.CleanUp();
- }
-
- private native void VerifyJSObject(JSObject var1);
-
- private void InitializeInstallerCertificate() throws SoftUpdateException {
- Object var1 = null;
- var1 = this.getCertificates(this.zigPtr, this.installerJarName);
- if (var1 == null) {
- throw new SoftUpdateException(Strings.error_NoCertificate(), -204);
- } else if (((Object[])var1).length > 1) {
- throw new SoftUpdateException(Strings.error_TooManyCertificates(), -203);
- } else {
- this.installPrincipal = new Principal(14, (byte[])((Object[])var1)[0]);
- }
- }
-
- private void CheckSilentPrivileges() {
- if (this.silent) {
- try {
- PrivilegeManager var1 = AppletSecurity.getPrivilegeManager();
- Target var2 = Target.findTarget("Impersonator");
- var1.enablePrivilege(var2);
- Target var3 = Target.findTarget(targetNames[2]);
- var1.enablePrivilege(var3, this.GetPrincipal());
- } catch (Throwable var4) {
- System.out.println(Strings.error_SilentModeDenied());
- this.silent = false;
- }
- }
- }
-
- private void RequestSecurityPrivileges(int var1) {
- if (var1 != 0 && var1 != 1) {
- var1 = 1;
- }
-
- PrivilegeManager var2 = AppletSecurity.getPrivilegeManager();
- Target var3 = Target.findTarget("Impersonator");
- var2.enablePrivilege(var3);
- Target var4 = Target.findTarget(targetNames[var1]);
- var2.enablePrivilege(var4, this.GetPrincipal());
- }
-
- protected final Principal GetPrincipal() {
- return this.installPrincipal;
- }
-
- protected final String GetUserPackageName() {
- return this.userPackageName;
- }
-
- protected final boolean GetSilent() {
- return this.silent;
- }
-
- protected final Enumeration GetInstallQueue() {
- return this.installedFiles != null ? this.installedFiles.elements() : null;
- }
-
- public Object GetFolder(String var1) {
- FolderSpec var2 = null;
-
- try {
- if (var1.compareTo("Installed") != 0) {
- var2 = new FolderSpec(var1, this.packageName, this.userPackageName);
- if (var1 == "User Pick") {
- var2.GetDirectoryPath();
- }
- }
-
- return var2;
- } catch (Throwable var3) {
- return null;
- }
- }
-
- public Object GetComponentFolder(String var1) {
- FolderSpec var3 = null;
- String var2 = VersionRegistry.getDefaultDirectory(var1);
- if (var2 == null) {
- var2 = VersionRegistry.componentPath(var1);
- int var4;
- if (var2 != null && (var4 = var2.lastIndexOf(System.getProperty("file.separator"))) > 0) {
- char[] var5 = new char[var4];
- var2.getChars(0, var4, var5, 0);
- var2 = new String(var5);
- }
- }
-
- if (var2 != null) {
- var3 = new FolderSpec("Installed", var2, this.userPackageName);
- }
-
- return var3;
- }
-
- public Object GetWinProfile(Object var1, String var2) {
- WinProfile var3 = null;
- String var4 = System.getProperty("os.name");
-
- try {
- if (this.packageName == null) {
- throw new SoftUpdateException(Strings.error_WinProfileMustCallStart(), -211);
- }
-
- if (var4.indexOf("Windows") >= 0 || var4.equals("Win32s")) {
- var3 = new WinProfile(this, (FolderSpec)var1, var2);
- }
- } catch (SoftUpdateException var5) {
- var3 = null;
- }
-
- return var3;
- }
-
- public Object GetWinRegistry() {
- WinReg var1 = null;
- String var2 = System.getProperty("os.name");
-
- try {
- if (this.packageName == null) {
- throw new SoftUpdateException(Strings.error_WinProfileMustCallStart(), -211);
- }
-
- if (var2.indexOf("Windows") >= 0 || var2.equals("Win32s")) {
- var1 = new WinReg(this);
- }
- } catch (Throwable var3) {
- var1 = null;
- }
-
- return var1;
- }
-
- private native void OpenJARFile() throws SoftUpdateException;
-
- private native void CloseJARFile();
-
- private native Object[] getCertificates(int var1, String var2);
-
- protected String ExtractJARFile(String var1) throws SoftUpdateException, AppletSecurityException {
- if (this.zigPtr == 0) {
- throw new SoftUpdateException("JAR file\thas\tnot\tbeen opened", -207);
- } else {
- PrivilegeManager var3 = AppletSecurity.getPrivilegeManager();
- Target var2 = Target.findTarget(targetNames[0]);
- var3.checkPrivilegeEnabled(var2);
- boolean var5 = false;
- Object var6 = null;
- var6 = this.getCertificates(this.zigPtr, var1);
- if (var6 == null) {
- throw new SoftUpdateException("Missing certificate for " + var1, -205);
- } else {
- for(int var4 = 0; var4 < ((Object[])var6).length; ++var4) {
- Principal var7 = new Principal(14, (byte[])((Object[])var6)[0]);
- if (this.installPrincipal.equals(var7)) {
- var5 = true;
- break;
- }
- }
-
- if (!var5) {
- throw new SoftUpdateException(Strings.error_MismatchedCertificate() + var1, -206);
- } else {
- String var9 = this.NativeExtractJARFile(var1);
- return var9;
- }
- }
- }
- }
-
- private native String NativeExtractJARFile(String var1) throws SoftUpdateException;
-
- public int StartInstall(String var1, VersionInfo var2, int var3) {
- try {
- if (var1 == null) {
- throw new SoftUpdateException(Strings.error_BadPackageName(), -208);
- } else {
- char[] var4;
- for(this.packageName = var1; this.packageName.endsWith("/"); this.packageName = new String(var4)) {
- var4 = new char[this.packageName.length() - 1];
- this.packageName.getChars(0, this.packageName.length() - 1, var4, 0);
- }
-
- this.versionInfo = var2;
- this.installedFiles = new Vector();
- this.OpenJARFile();
- this.InitializeInstallerCertificate();
- this.CheckSilentPrivileges();
- this.RequestSecurityPrivileges(var3);
- this.progress = new ProgressMediator(this);
- this.progress.StartInstall();
- return 0;
- }
- } catch (SoftUpdateException var5) {
- return var5.GetError();
- } catch (Exception var6) {
- ((Throwable)var6).printStackTrace();
- return -201;
- }
- }
-
- protected void UserCancelled() {
- this.userChoice = 0;
- this.AbortInstall();
- }
-
- protected void UserApproved() {
- this.userChoice = 1;
- }
-
- public int FinalizeInstall() {
- boolean var1 = false;
- short var2 = 0;
-
- try {
- if (this.packageName == null) {
- byte var23 = -1;
- return var23;
- }
-
- this.progress.ConfirmWithUser();
-
- while(this.userChoice == -1) {
- Thread.sleep(10L);
- }
-
- if (this.userChoice != 1) {
- this.AbortInstall();
- short var3 = -210;
- return var3;
- }
-
- Enumeration var6 = this.GetInstallQueue();
- InstallObject var7 = null;
-
- try {
- while(var6.hasMoreElements()) {
- var7 = (InstallObject)var6.nextElement();
-
- try {
- var7.Complete();
- } catch (SoftUpdateException var17) {
- if ((short)var17.GetError() != 999) {
- throw var17;
- }
-
- var1 = true;
- }
- }
- } catch (Throwable var18) {
- if (var7 != null) {
- var7.Abort();
- }
-
- while(var6.hasMoreElements()) {
- try {
- var7 = (InstallObject)var6.nextElement();
- var7.Abort();
- } catch (Throwable var16) {
- }
- }
-
- throw var18;
- }
-
- if (this.versionInfo != null) {
- var2 = (short)VersionRegistry.installComponent(this.packageName, (String)null, this.versionInfo);
- }
- } catch (SoftUpdateException var19) {
- var2 = (short)var19.GetError();
- } catch (AppletSecurityException var20) {
- var2 = -202;
- } catch (Throwable var21) {
- var21.printStackTrace();
- System.out.println(Strings.error_Unexpected() + " FinalizeInstall");
- var2 = -201;
- } finally {
- if (this.installedFiles != null) {
- this.installedFiles.removeAllElements();
- }
-
- this.CleanUp();
- }
-
- if (var2 == 0 && var1) {
- return 999;
- } else {
- return var2;
- }
- }
-
- public synchronized void AbortInstall() {
- try {
- if (this.installedFiles != null) {
- Enumeration var3 = this.GetInstallQueue();
-
- while(var3.hasMoreElements()) {
- InstallObject var4 = (InstallObject)var3.nextElement();
-
- try {
- var4.Abort();
- } catch (Throwable var11) {
- }
- }
-
- this.installedFiles.removeAllElements();
- this.installedFiles = null;
- }
-
- this.CloseJARFile();
- } catch (Throwable var12) {
- System.out.println(Strings.error_Unexpected() + " AbortInstall");
- var12.printStackTrace();
- } finally {
- try {
- this.CleanUp();
- } catch (Throwable var10) {
- var10.printStackTrace();
- }
-
- }
-
- }
-
- private synchronized void CleanUp() {
- if (this.progress != null) {
- this.progress.Complete();
- }
-
- this.CloseJARFile();
- this.progress = null;
- this.zigPtr = 0;
- if (this.installedFiles != null) {
- Enumeration var1 = this.GetInstallQueue();
-
- while(var1.hasMoreElements()) {
- InstallObject var2 = (InstallObject)var1.nextElement();
- var2.Abort();
- }
-
- this.installedFiles.removeAllElements();
- }
-
- this.installedFiles = null;
- this.packageName = null;
- }
-
- protected void ScheduleForInstall(InstallObject var1) {
- if (this.progress != null) {
- this.progress.ScheduleForInstall(var1);
- }
-
- this.installedFiles.addElement(var1);
- }
-
- public int AddSubcomponent(String var1, VersionInfo var2, String var3, Object var4, String var5, boolean var6) {
- try {
- if (this.packageName == null) {
- throw new SoftUpdateException(Strings.error_BadPackageNameAS(), -200);
- } else {
- String var8 = this.packageName.length() == 0 ? "" : this.packageName + "/";
- if (var1 != null && var1.length() != 0) {
- if (var1.toUpperCase().startsWith("=COMM=/")) {
- var1 = (var1.substring(7) + "===").substring(0, var1.length() - 7);
- } else if (var1.charAt(0) != '/') {
- var1 = var8 + var1;
- }
- } else {
- var1 = var8 + var3;
- }
-
- if (var5 == null || var5.length() == 0) {
- var5 = var3;
- }
-
- boolean var9 = false;
- if (!var6 && var2 != null && VersionRegistry.validateComponent(var1) == 0) {
- VersionInfo var10 = VersionRegistry.componentVersion(var1);
- if (var2.compareTo(var10) > 0) {
- var9 = true;
- }
- } else {
- var9 = true;
- }
-
- if (var9) {
- InstallFile var7 = new InstallFile(this, var1, var2, var3, (FolderSpec)var4, var5, var6);
- var7.ExtractFile();
- this.ScheduleForInstall(var7);
- }
-
- return 0;
- }
- } catch (SoftUpdateException var11) {
- return var11.GetError();
- } catch (AppletSecurityException var12) {
- return -202;
- } catch (Throwable var13) {
- System.out.println(Strings.error_Unexpected() + "AddSubcomponent");
- return -201;
- }
- }
-
- public int Execute(String var1) {
- try {
- InstallExecute var2 = new InstallExecute(this, var1);
- var2.ExtractFile();
- this.ScheduleForInstall(var2);
- return 0;
- } catch (SoftUpdateException var3) {
- return var3.GetError();
- } catch (AppletSecurityException var4) {
- return -202;
- } catch (Throwable var5) {
- var5.printStackTrace();
- System.out.println(Strings.error_Unexpected() + "Execute");
- return -201;
- }
- }
-
- public int[] Gestalt(String var1) {
- int[] var2 = new int[]{0, 0};
-
- try {
- var2[1] = this.NativeGestalt(var1);
- } catch (SoftUpdateException var4) {
- var2[0] = var4.GetError();
- } catch (Throwable var5) {
- var2[0] = -1;
- System.out.println(Strings.error_Unexpected() + "Gestalt");
- }
-
- return var2;
- }
-
- private native int NativeGestalt(String var1) throws SoftUpdateException;
-
- static {
- Principal var3 = PrivilegeManager.getSystemPrincipal();
- UserTarget var0 = new UserTarget(targetNames[0], var3, UserDialogHelper.targetRiskMedium(), UserDialogHelper.targetRiskColorMedium(), Strings.targetDesc_LimitedInstall(), Strings.getString("s37"), Strings.targetUrl_LimitedInstall());
- var0 = (UserTarget)((Target)var0).registerTarget();
- Target[] var4 = new Target[]{var0};
- UserTarget var1 = new UserTarget(targetNames[1], var3, UserDialogHelper.targetRiskHigh(), UserDialogHelper.targetRiskColorHigh(), Strings.targetDesc_FullInstall(), Strings.getString("s38"), Strings.targetUrl_FullInstall(), var4);
- var1 = (UserTarget)((Target)var1).registerTarget();
- var4[0] = var1;
- UserTarget var2 = new UserTarget(targetNames[2], var3, UserDialogHelper.targetRiskHigh(), UserDialogHelper.targetRiskColorHigh(), Strings.targetDesc_SilentInstall(), Strings.getString("s39"), Strings.targetUrl_SilentInstall(), var4);
- var2 = (UserTarget)((Target)var2).registerTarget();
- }
- }
-